草庐IT

Java final 与 C++ const

全部标签

php - 我可以使用字符串连接在 PHP 中定义类 CONST 吗?

我知道你可以使用字符串连接来创建全局常量:define('FOO','foo');define('BAR',FOO.'bar');echoBAR;将打印“foobar”。但是,我在尝试使用类常量执行相同操作时遇到错误。classfoobar{constfoo='foo';constfoo2=self::foo;constbar=self::foo.'bar';}foo2的定义没有问题,但是声明constbar会出错Parseerror:syntaxerror,unexpected'.',expecting','or';'我也尝试过使用像sprintf()这样的函数,但它不喜欢左括号,而

c++ - 当它绑定(bind)到调用函数中的 const 引用时,它的返回值的生命周期如何扩展到调用函数的范围?

“如果你从函数返回一个值(不是引用),然后将它绑定(bind)到调用函数中的const引用,它的生命周期将扩展到调用函数的范围。”所以:案例AconstBoundingBoxPlayer::GetBoundingBox(void){returnBoundingBox(&GetBoundingSphere());}从函数GetBoundingBox()返回一个constBoundingBox类型的值变体I:(将其绑定(bind)到const引用)constBoundingBox&l_Bbox=l_pPlayer->GetBoundingBox();变体II:(将其绑定(bind)到con

c++ - 为什么编译器允许字符串文字不是 const?

内存中的文字到底在哪里?(见下面的例子)我不能修改文字,所以它应该是constchar*,虽然编译器允许我使用char*,但即使使用大多数编译器标志,我也没有警告。而将constchar*类型隐式转换为char*类型会给我一个警告,见下文(在GCC上测试,但在VC++2010上表现类似)。另外,如果我修改constchar的值(在下面使用GCC最好给我警告的技巧),它不会出错,我什至可以修改并在GCC上显示它(即使我猜到了仍然是一个未定义的行为,我想知道为什么它没有对文字做同样的事情)。这就是为什么我要问这些文字存储在哪里,以及更常见的const应该存储在哪里?constchar*a=

C++ 将 char 转换为 const char*

基本上我只想循环遍历一串字符,将每个字符拉出,每个字符都必须是constchar*类型,这样我就可以将它传递给函数。这是一个例子。感谢您的帮助。stringthestring="abc123";constchar*theval;stringresult;for(i=0;i 最佳答案 你可以获取那个元素的地址:theval=&thestring[i]; 关于C++将char转换为constchar*,我们在StackOverflow上找到一个类似的问题: htt

c++ - C++ 中的 const 指针与 const 引用

根据下面的程序,我可以理解,引用前面的const关键字的意思是Const对const值的引用,对吗?#includeusingnamespacestd;structs{intx;};intmain(void){sa={10},b={30};//INPOINTERS----------------consts*ptrToConstValue;ptrToConstValue=&a;//ptrToConstValue->x=30;ptrToConstValue=&b;s*constconstPtrToNonConstVaue=&a;constPtrToNonConstVaue->x=40;/

c++ - std::string::compare(const char*) 可以抛出异常吗?

这是过载(4)here在“异常”部分,重载2、3、5、6(具有pos1和/或pos2参数)被命名为throwingstd::out_of_range.重载(4)没有“pos”参数,但是没有标注noexcept.是否抛出取决于实现?在GCC7的libstdc++中,它调用char_traits::length和char_traits::compare.这些似乎不能扔,但没有标记noexcept. 最佳答案 除了析构函数、交换函数、移动构造函数和移动赋值运算符之外,标准仅在函数具有widecontract时才标记函数noexcept,即

c++ - 在 c'tor 初始化器列表中将临时绑定(bind)到 const 引用

C++03中的第12.2.5节说“临时绑定(bind)到构造函数的ctor-initializer(12.6.2)一直持续到构造函数退出"所以我尝试了以下程序#includeusingnamespacestd;structfoo{foo(){cout我得到的输出是:fooc'torfood'torbarc'tor现在按照标准,由bar的c'tor的c'torinit-list中的foo()临时生成的临时文件将在bar的c'tor之后被销毁,因此应该在之后打印food'torbarc'tor但情况恰恰相反。请说明原因。 最佳答案 我已

c++ - 通过 const& 或 && 传递模板参数

我有这个示例程序:#includetemplatevoidprint_surrounded(Message&&msg,constDecoration&decoration,constPrintImpl&print_impl){print_impl(decoration);//shouldforwardbeused?print_impl("");print_impl(std::forward(msg));print_impl("");print_impl(decoration);}templatevoidpretty_print(Message&&msg,constPrintImpl&p

C++ 防止 const 方法通过成员指针或引用更改数据

假设我有一个像这样的简单类classFoo{public:voidfoo()const{str[5]='x';obj->changeTheWorld();x=4;y.get()=5;obj2->changeTheWorld();}private:char*str;//somereferenceddata,notownedbyFooComplexObj*obj;//somereferenceddata,notownedbyFooint&x;//referencesaswell//wrappedreference,buthasa"T&get()const"std::reference_wr

c++ - 如何在不复制或查找的情况下获得 const stringstream 缓冲区的长度?

我有一个conststd::stringstream并希望找出其底层字符串缓冲区中有多少字节。我不能seekg到最后,tellg然后seekg重新开始,因为这些操作都不可用const。我不想得到str().size()因为str()返回一个拷贝,这可能不是一个微不足道的数据量。我有什么好的选择吗?(流本身以const的形式呈现给我,只是因为它是另一种类型的成员,并且我收到了对该类型对象的const引用。流表示一个“文档”,它的封装对象代表一个CGI响应,我正在尝试从Content-Length中生成准确的operatorHTTPheader行。) 最佳答案